import Vue from 'vue'

import Cookies from 'js-cookie'

import Element from 'element-ui'
import './assets/styles/element-variables.scss'

import '@/assets/styles/index.scss' // global css
import '@/assets/styles/ruoyi.scss' // ruoyi css
import App from './App'
import store from './store'
import router from './router'
import directive from './directive' // directive
import plugins from './plugins' // plugins
import { download } from '@/utils/request'

import './assets/icons' // icon
import './permission' // permission control
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey } from "@/api/system/config";
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
// 分页组件
import Pagination from "@/components/Pagination";
// 自定义表格工具组件
import RightToolbar from "@/components/RightToolbar"
// 富文本组件
import Editor from "@/components/Editor"
// 文件上传组件
import FileUpload from "@/components/FileUpload"
// 图片上传组件
import ImageUpload from "@/components/ImageUpload"
// 图片预览组件
import ImagePreview from "@/components/ImagePreview"
// 字典标签组件
import DictTag from '@/components/DictTag'
// 头部标签组件
import VueMeta from 'vue-meta'

//导出PDF
import exportPdf from "@/utils/exportPdf";
Vue.use(exportPdf)

// 字典数据组件
import DictData from '@/components/DictData'

import BaiduMap from 'vue-baidu-map'
Vue.use(BaiduMap, {
  ak: '2kytKG3qZDTn3478BeoqCnsWV8WZT5fn'
})
function getIcon(type){
  let video = ["mp4","avi","mkv","mov","wmv","flv","webm","3gp","mpeg","ts","rmvb"]
  let voice = ["mp3","wav","acc","flac","alac","ogg","wma","aiff","ape","m4a"]
  let pic = ["jpeg","jpg","png","gif","bmp","tiff","tif","webp","svg"]
  let rar = ["zip","rar","7z","tar","gz"]
  if(type == "folder"){
    return "folder"
  }else if(video.includes(type)){
    return "video"
  }else if(voice.includes(type)){
    return "voice"
  }else if(pic.includes(type)){
    return "pic"
  }else if(type == "pdf"){
    return "pdf-f"
  }else if(rar.includes(type)){
    return "rar"
  }else if(type == "xls" ||type == "csv" ||type == "xlsx"){
    return "excel-f"
  }else if(type == "docx" ||type == "doc"){
    return "word"
  }else {
    return "unknow"
  }
}
function isView(src){
  if (/\.(jpg|jpeg|png|gif|bmp|webp|svg|pdf)$/i.test(src)){
    return true;
  }
  if (/\.(mp4|webm)$/i.test(src)){
    return true;
  }
  if (/\.(mp3|wav|acc)$/i.test(src)){
    return true;
  }
  return false
}

// 全局方法挂载
Vue.prototype.getDicts = getDicts
Vue.prototype.getConfigKey = getConfigKey
Vue.prototype.parseTime = parseTime
Vue.prototype.resetForm = resetForm
Vue.prototype.addDateRange = addDateRange
Vue.prototype.selectDictLabel = selectDictLabel
Vue.prototype.selectDictLabels = selectDictLabels
Vue.prototype.download = download
Vue.prototype.handleTree = handleTree
Vue.prototype.getIcon = getIcon;
Vue.prototype.isView = isView;

// 全局组件挂载
Vue.component('DictTag', DictTag)
Vue.component('Pagination', Pagination)
Vue.component('RightToolbar', RightToolbar)
Vue.component('Editor', Editor)
Vue.component('FileUpload', FileUpload)
Vue.component('ImageUpload', ImageUpload)
Vue.component('ImagePreview', ImagePreview)

Vue.use(directive)
Vue.use(plugins)
Vue.use(VueMeta)


// 视频播放组件
import VideoPlayer from 'vue-video-player'
window.videojs = VideoPlayer.videojs
require('video.js/dist/lang/zh-CN.js')
import 'video.js/dist/video-js.css'
import 'vue-video-player/src/custom-theme.css'
import 'videojs-contrib-hls'
import 'videojs-flash'
Vue.use(VideoPlayer)

//二维码
import vueQr from 'vue-qr'
Vue.use(vueQr)
DictData.install()

/**
 * If you don't want to use mock-server
 * you want to use MockJs for mock api
 * you can execute: mockXHR()
 *
 * Currently MockJs will be used in the production environment,
 * please remove it before going online! ! !
 */

Date.prototype.format = function(format) {
  var o = {
    'M+': this.getMonth() + 1,
    'd+': this.getDate(),
    'h+': this.getHours(),
    'm+': this.getMinutes(),
    's+': this.getSeconds(),
    'q+': Math.floor((this.getMonth() + 3) / 3),
    'S': this.getMilliseconds()
  }
  if (/(y+)/.test(format)) {
    format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(format)) {
      format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
    }
  }
  return format
}

// 表单中截取附件格式
Vue.prototype.formatAttach = function (val) {
  if (val) {
    let temp = 1;
    // 首先将值转为数组
    const list = Array.isArray(val) ? val : val.split(',');
    // 然后将数组转为对象数组
    let fileList = list.map(item => {
      if (typeof item === "string") {
        let name = item;
        if (name.lastIndexOf("/") > -1) {
          let str = name.slice(name.lastIndexOf("/") + 1)
          let pix = str.slice(str.lastIndexOf(".") + 1);
          name = str.slice(0,str.lastIndexOf("_"))+"."+pix
        }
        item = { name: name, url: process.env.VUE_APP_BASE_API+item };
      }
      item.uid = item.uid || new Date().getTime() + temp++;
      return item;
    });
    return fileList;
  } else {
    return [];
  }
}

Vue.use(Element, {
  size: Cookies.get('size') || 'medium' // set element-ui default size
})

Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})
